home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Mac Game Programming Gurus / TricksOfTheMacGameProgrammingGurus.iso / More Source / C⁄C++ / Marathon Map Viewer / @Source / levelUtils.cpp < prev    next >
Text File  |  1995-06-05  |  3KB  |  135 lines

  1. /*-----------------------------------------------------------------
  2. -----------------------------------------------------------------*/
  3. #include "levelUtils.h"
  4.  
  5.  
  6. /*-----------------------------------------------------------------
  7.     Finds out the center of the map by getting the bounds etc.
  8. -----------------------------------------------------------------*/
  9. void getMapCenter(levelData *theLevelData, long *centerX, long *centerY)
  10.     {
  11.     long    minx = 32767, miny = 32767, maxx = -32767, maxy = -32767;
  12.     long    x, curX, curY;
  13.     
  14.     for (x = 0; x < theLevelData->numPoints; ++x)
  15.         {
  16.         curX = theLevelData->thePoints[x].x;
  17.         curY = theLevelData->thePoints[x].y;
  18.         if (curX < minx)
  19.             minx = curX;
  20.         if (curX > maxx)
  21.             maxx = curX;
  22.         if (curY < miny)
  23.             miny = curY;
  24.         if (curY > maxy)
  25.             maxy = curY;
  26.         }
  27.     *centerX = (maxx + minx) / 2;
  28.     *centerY = (miny + maxy) / 2;
  29.     }
  30.  
  31. /*-----------------------------------------------------------------
  32.     Makes all the EPNTs into PNTS
  33. -----------------------------------------------------------------*/
  34. void convertEPNTstoPNTS(levelData *theLevelData)
  35.     {
  36.     if (!theLevelData->numExtendedPts)
  37.         return;
  38.     short    numEpnts = theLevelData->numExtendedPts;
  39.     Point    newPoint;
  40.  
  41.     theLevelData->numExtendedPts = 0;
  42.     for (int x = 0; x < numEpnts; ++x)
  43.         {
  44.         newPoint.h = theLevelData->theExtendedPts[x].x;
  45.         newPoint.v = theLevelData->theExtendedPts[x].y;
  46.         addNewPoint(theLevelData, newPoint);
  47.         }
  48.     DisposePtr((Ptr)theLevelData->theExtendedPts);
  49.     theLevelData->theExtendedPts = nil;
  50.     }
  51.  
  52. /*-----------------------------------------------------------------
  53.     Add a new point and return its index
  54. -----------------------------------------------------------------*/
  55. short addNewPoint(levelData *theLevelData, Point where)
  56.     {
  57.     // add a new regular point here
  58.     if (theLevelData->numPoints >= MAX_VERTICIES)
  59.         return -1;
  60.  
  61.     long            numPoints = ++theLevelData->numPoints;
  62.     theLevelData->thePoints = (PNTSdata*)resizeArray(theLevelData->thePoints, sizeof(PNTSdata) * numPoints);
  63.     
  64.     // set the data
  65.     --numPoints;
  66.     theLevelData->thePoints[numPoints].x = where.h;
  67.     theLevelData->thePoints[numPoints].y = where.v;
  68.     return numPoints;    
  69.     }
  70.  
  71. /*-----------------------------------------------------------------
  72.     Makes the size of an array bigger
  73. -----------------------------------------------------------------*/
  74. void *resizeArray(void *theArray, long newSize)
  75.     {
  76.     Ptr                newArray;
  77.     long            oldSize;
  78.     
  79.     if (theArray)
  80.         {
  81.         oldSize = GetPtrSize((Ptr)theArray);
  82.         SetPtrSize((Ptr)theArray, newSize);
  83.         if (MemError() == noErr)
  84.             {
  85.             // set new data to 0
  86.             for (long x = oldSize; x < newSize; ++x)
  87.                 ((char *)theArray)[x] = 0;
  88.             
  89.             return theArray;
  90.             }
  91.         }
  92.  
  93.     // make new bigger array
  94.     newArray = NewPtrClear(newSize);
  95.     OSErr theErr = MemError();
  96.     if (!newArray || theErr)
  97.         SysBreak();
  98.     
  99.     if (theArray)
  100.         {
  101.         oldSize = GetPtrSize((Ptr)theArray);
  102.  
  103.         // copy the old data
  104.         BlockMoveData(theArray, newArray, oldSize);
  105.  
  106.         // dispose the old array
  107.         DisposePtr((Ptr)theArray);
  108.         }
  109.  
  110.     return newArray;
  111.     }
  112.  
  113.  
  114.  
  115.  
  116.  
  117.  
  118.  
  119.  
  120.  
  121.  
  122.  
  123.  
  124.  
  125.  
  126.  
  127.  
  128.  
  129.  
  130.  
  131.  
  132.  
  133.  
  134.  
  135.